"""
集合特点：
    1、集合是无序的，集合没有下标
    2、集合是可变数据类型--从下述的添加、删除就可以看出集合内的数据也会跟着改变。
    3、天然去重
    4、集合内不可以存放可变数据类型

"""
"""创建空集合只能使用set()"""
set1 = set()
print(type(set1))
set2 = {}   # 空的大括号只能会是字典
print(type(set2))

set3 = {1, 2, 3, 4, 5, "小明", "小丽"}
"""集合是无序的，返回值的位置是随机出现的"""
print(set3)

"""集合去重"""
set4 = {1, 2, 3, 3, 3, 3, 3, 3, 6, 7, "小明", "小丽"}
print(set4)     # set4 集合内有好几个元素3 ，但是输出到控制台时，只有1个元素3的出现

"""集合内不能存放可变数据类型"""
# s1 = {1, 2, 3, ["小明", "小丽"]}
# print(s1)       # 由于列表是可变数据类型，所以会会直接报错；集合内也不可以放集合，因为集合也是可变数据类型  TypeError: unhashable type: 'list'

"""新增元素"""
set5 = {1, 2, 3, 4, 5, "小黑", "小红"}
# 新增一个元素
set5.add(10)
print(set5)

# 新增大于1个元素，会提示错误，单次只能添加一个元素
# set5.add(12,13)
# print(set5) # TypeError: set.add() takes exactly one argument (2 given)
set5.add(1)    # 原集合内已经有元素1的存在了，故再次添加相同的元素，会自动去重
print(set5)

# 添加元组数据  ---集合内会将添加的元组数据以元组的形式增加
tuple1=("嘿嘿", "哈哈")
set5.add(tuple1)
print(set5)     # {1, 2, 3, 4, 5, 10, ('嘿嘿', '哈哈'), '小黑', '小红'}

# 使用update追加每个元素到集合内
set5.update(tuple1)
print(set5)     # {1, 2, 3, 4, 5, 10, '小黑', '哈哈', '小红', '嘿嘿', ('嘿嘿', '哈哈')}

"""删除元素"""
set6 = {'小红', 1, 2, 3, 4, 5, 10, '哈哈', '小黑', '嘿嘿', ('嘿嘿', '哈哈')}
# 删除某个指定元素，如果元素存在，则删除。如果不存在，则报错
set6.remove(1)
print(set6)      # 有元素，删除成功
# set6.remove(11)
# print(set6)     # 没有元素，remove()方法会报错

# 删除某个指定元素，如果元素存在，则删除。如果不存在，也不报错
set6.discard("小黑")
print(set6)      # 有元素，删除成功
set6.discard("小黑黑")
print(set6)     # 没有元素，discard()方法也不会报错

# 随机删除某个元素，并把删除的元素返回出来
print(set6.pop())
print(set6)

"""判断某个元素是否在集合内"""
print(3 in set6)
print(30 in set6)

"""特殊情况：True和1会触发去重，False和0会触发去重，他们不能同时出现在集合内"""
# 当布尔值出现在前面，则不显示0,1
set7 = {True, False, 0, 1, 2, 3}
print(set7)     # {False, True, 2, 3}

# 如果True和False元素在最后面，则不显示布尔值
set7 = {0, 1, 2, 3, True, False}
print(set7)     # {0, 1, 2, 3}


